#ifndef PID_H_
#define PID_H_

#include "stm32f10x.h"

// 定义PID控制器结构体
typedef volatile struct
{
    float kp; // 比例增益（Proportional Gain），用于控制当前误差的影响
    float ki; // 积分增益（Integral Gain），用于消除稳态误差
    float kd; // 微分增益（Derivative Gain），用于预测误差的变化趋势

    float target;   // 目标值（Target Point），即期望达到的理想值
    float measured; // 实际测量值（Measured Value），即当前系统的输出值
    float error;    // 当前误差（Current Error），即目标值与测量值之间的差异

    float errorPre;            // 上一次误差（Previous Error），用于微分项的计算
    float errorInteg;          // 累积误差（Integral of Error），用于积分项的计算
    float errorIntegLimitHigh; // 积分上限（Integral Limit High），防止积分饱和
    float errorIntegLimitLow;  // 积分下限（Integral Limit Low），防止积分饱和

    float out;          // PID控制器的输出值
    float outLimitHigh; // 输出值上限（Output Limit High），限制输出的最大值
    float outLimitLow;  // 输出值下限（Output Limit Low），限制输出的最小值
} _st_PidObject;

void pid_rest(_st_PidObject *pPid);
void pid_update(_st_PidObject *pPid, const float dt);
void pid_update_E(_st_PidObject *pPid, const float dt);

#endif /*PID_H_*/
